/*
day242
2020.4.26
*/
#include<iostream> 
#include<cmath>
using namespace std;


struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
	struct Node{
		int max=-1;
		int min=101;
	};
	
public:
    int maxAncestorDiff(TreeNode* root) {
		int res=0;
		help(root,res);
		return res; 
    }
    
    Node help(TreeNode *root,int &res)
    {
    	Node cur;
    	if(!root)
    	{
    		return cur;
		}
    	
    	Node l=help(root->left,res);
    	Node r=help(root->right,res);
    	
    	cur.max=max(cur.max,l.max);
    	cur.max=max(cur.max,r.max);
    	
    	cur.min=min(cur.min,l.min);
    	cur.min=min(cur.min,r.min);
    	
    	int tem=0;
    	
    	if(l.max!=-1)
    	{
    		tem=max( abs(root->val-l.max) , abs(root->val-l.min) );
    		if(tem>res)
    		{
    			res=tem;
			}
		}
    	
    	
    	if(r.max!=-1)
    	{
    		tem=max( abs(root->val-r.max) , abs(root->val-r.min) );
    		if(tem>res)
    		{
    			res=tem;
			}
		}
    	
    	return cur;
	}
};


int main()
{
	return 0;
}
